# -*- coding：utf-8 -*-
"""
@Time:2024-08-147:42
@Auth:泛彼泊舟
@File:3、深拷贝和浅拷贝.py
@IDE:PyCharm
@模块功能：xxx
"""
"""
所有的数据类型都支持拷贝功能
- 浅拷贝
- 复制一份数据
- 新的数据里面的值指向原来数据的内存地址（引用）
"""
# 导入拷贝模块
import copy

# 1、浅拷贝
# 准备一个数据：使用字典对应的值分别是可变和不可变的类型
dict1 = {'list_num': [1, 2, 3], 'num': 666}
print(dict1)
# 对字典进行浅拷贝
new_dict = copy.copy(dict1)
print(new_dict)
print('--' * 100)
# 字典浅拷贝完成之后，对原来数据进行修改之后，被浅拷贝的数据也发生修改
# 结论：对于可变的数据类型使用浅拷贝无效
dict1['list_num'].append(4)
print(dict1)
print(new_dict)

# 2、深拷贝
# 深拷贝
# 导入拷贝模块
import copy

# 准备一个数据：使用字典对应的值分别是可变和不可变的类型
dict1 = {'list_num': [1, 2, 3], 'num': 666}
print(dict1)
# 对字典进行深拷贝
new_dict = copy.deepcopy(dict1)
print(new_dict)
print('--' * 100)
# 结论：对于可变的数据类型使用深拷贝可以保证数据独立
dict1['list_num'].append(4)
print(dict1)  # {'list_num': [1, 2, 3, 4], 'num': 666}
print(new_dict)  # {'list_num': [1, 2, 3], 'num': 666}

"""
总结:
- 不管是可变的数据类型或者是不可变的数据类型都是可以使用深拷贝和浅拷贝
- 但是当数据类型是可变的，那么进行浅拷贝会无效，一般使用深拷贝
- 对于不可变的数据类型一般建议使用浅拷贝，节省内存
- 可变的数据类型一般使用深拷贝，不可变的数据类型使用浅拷贝
"""